package is202.hrms.entity;

/*
 * Ctrl + Shift + I = Henter somregel de nødvendige import setningene 
 */
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.inject.Named;


/**
 *
 * @author Kim Lindtner
 * 
 * @Entity sier at dette skal være en entitet i databasen, det er viktig at den 
 * blir definert før klassen blir definert
 * 
 * implements Serializable betyr  at vi skal kunne sende objekter frem og tilbake fra 
 * BackingBean og EJB
 * foru er navnet på entiteten
 */
@Named("foru")
@Entity
public class Forum implements Serializable {

    /**
     * static final long verdi er en satt verdi som ikke kan endres som hører til alle objektene som blir laget
     * serialVersionUID = 1L sørger for at klient og server har samme versjon. Det brukes når det er gjort endringer
     * for å vise at dette er f.eks en annen versjon enn den som er i drift.  1L skal tolkes som et 64 bits tall.
     */
    
    private static final long serialVersionUID = 42L;

      /**
     * Id betyr at det første feltet er primærnøkkelen
     * GeneratedValue er en verdi som blir laget utifra visse parametere
     * GV holder av 50 tall for hver session
     */
    @Id
    @GeneratedValue
    private long forumNr;


    /** @NotNull og @Size er constraints på verdien av navn
     * Standard kolonnenavn er det samme som feltnavn,så vi trenger ingen merknader
     * for å spesifisere kolonneavn,hvis ikke man trenger å koble til en
     * eksisterende database */
    @NotNull
    @Size(min = 1)
    private String tema;
    private String innhold;

    /** 
     * @OneToMany markerer Forum som en en-til-mange relasjon.
     */
    @OneToMany(mappedBy = "")
    private List<Forum> forum;


    /**
     * 
     * Det er viktig å ha get og set metoder for å kunne sette en verdi til 
     * variablene og for å kunne hente ut denne dataen
     *  
     */
    public Forum() {
        forum = new ArrayList<Forum>();
    }

    public long getForumNr() {
        return forumNr;
    }

    public void setForumNr(long forumNr) {
        this.forumNr = forumNr;
    }

     public String getTema() {
        return tema;
    }

    public void setTema(String tema) {
        this.tema = tema;
    }

    public String getInnhold() {
        return innhold;
    }

    public void setInnhold(String innhold) {
        this.innhold = innhold;
    }

    public List<Forum> getForum() {
        return forum;
    }

    /**
     * 
     * Override kommer fra en overklasse
     * hashCode sørger for at += legger til den gamle verdien til den nye verdien
     * to objekter som er like skal ha samme hash
     * Dette er for å oppdage like objekter i et eventuellt hashmap
     */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (int) (this.forumNr ^ (this.forumNr >>> 32));
        return hash;
    }

     /**
     * 
     * Denne ser om primærnøklene er like i 2 objekter
     * Hvis de er like returnerer vi true, og vi kan bruke denne 
     * metoden senere hvis vi ønsker å bruke denne informasjonen til noe nyttig
     * (getClass() != obj.getClass()) sier at klassen ikke er lik objektet
     * (obj == null) objektet er ikke NULL
     * this.trådId != other.trådId && (this.trådId == null || !this.trådId.equals(other.trådId)))
     * Denne trådID nækkelen er ikke lik det andre objektet sin TrådID og 
     * ingen av TrådIDene er NULL ELLER at de ikke er like.
     */
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        Forum other = (Forum) obj;
        if (forumNr != other.forumNr) {
            return false;
        }
        return true;
    }

    /**
 * Denne metoden skriver ut den gjeldene Tråden til string
 */
    
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(forumNr);
        sb.append(" ");
        sb.append(tema);
        sb.append(innhold);

        return sb.toString();
    }
}
